package com.demo.java.OD501_550.OD529;

import java.util.Scanner;
import java.util.Arrays;

/**
 * @author bug菌
 * @Source 公众号：猿圈奇妙屋
 * @des： 【猴子吃桃(B卷-100分)】问题
 * @url： https://blog.csdn.net/weixin_43970743/article/details/146495500
 */
public class OdMain {
    public static void main(String[] args) {
        //处理输入
        Scanner in = new Scanner(System.in);
        String[] params = in.nextLine().split(" "); // 读取输入的所有数据
        int[] nums = new int[params.length - 1]; // 存储所有机器的负载
        for (int i = 0; i < params.length - 1; i++) {
            nums[i] = Integer.parseInt(params[i]); // 将任务负载转换为整数
        }
        int leave_time = Integer.parseInt(params[params.length - 1]); // 读取最大时间限制
        Arrays.sort(nums); // 对任务负载进行排序

        // 二分查找算法初始化
        int left = 1, right = nums[nums.length - 1]; // 工作负载最小值和最大值
        while (left < right) {
            int mid = (right - left) / 2 + left; // 计算中间值
            int time = 0;
            // 计算总时间
            for (int num : nums) {
                time += (num + mid - 1) / mid; // 每个任务分配到负载为mid的机器上需要的时间
            }
            if (time <= leave_time) { // 如果总时间小于等于最大限制时间
                right = mid; // 缩小查找范围
            } else {
                left = mid + 1; // 如果时间超出了限制，增大负载
            }
        }
        System.out.println(left); // 输出最小工作负载
    }
}